package fr.uniscol.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.support.DaoSupport;
import org.springframework.stereotype.Service;

import fr.uniscol.dao.IAnneeScolaireDao;
import fr.uniscol.model.BaseAnneeScolaire;
import fr.uniscol.model.EtablissementModel;
import fr.uniscol.service.IAnneeScolaireService;

@Service("anneeScolaireService")
public class AnneeScolaireServiceImpl implements IAnneeScolaireService {

	@Autowired
	private IAnneeScolaireDao anneeScolaireDao;
	
	
	@Override
	public BaseAnneeScolaire getBaseById(long baseId) {
		return anneeScolaireDao.getBaseById(baseId);
	}
	
	@Override
	public List<BaseAnneeScolaire> getAllBasesByEtablissement(EtablissementModel etablissement) {
		
		if(etablissement == null || etablissement.getId() == 0){ 
			throw new NullPointerException("Etablissement non renseigné");
		}
		if(anneeScolaireDao == null){
			throw new NullPointerException("Classe DAO non initialisé");
		}
		
		List<BaseAnneeScolaire> bases = null;
		bases = anneeScolaireDao.getAllBasesByEtablissement(etablissement);
		
		return bases;
	}

	@Override
	public BaseAnneeScolaire findBaseCourante(EtablissementModel etablissement){
		
		if(etablissement == null || etablissement.getId() == 0){ 
			throw new NullPointerException("Etablissement non renseigné");
		}
		
		List<BaseAnneeScolaire> allBases = getAllBasesByEtablissement(etablissement);
		
		if(allBases == null){
			throw new NullPointerException("Liste de bases vide");
		}
		
		BaseAnneeScolaire current = null;
		for(BaseAnneeScolaire b : allBases){
			if(current == null 
			|| b.getAnnee() > current.getAnnee()){
				current = b;
			}
		}
		
		return current;
	}

	@Override
	public boolean saveAnneeScolaire(BaseAnneeScolaire anneeScolaire){
		
		if(anneeScolaire == null){ 
			throw new NullPointerException("Aucune base");
		}
		
		return anneeScolaireDao.save(anneeScolaire);
	}

	@Override
	public boolean deleteAnneeScolaire(BaseAnneeScolaire base) {
		
		return anneeScolaireDao.deleteAnneeScolaire(base);
	}
}
